in the help message.
void setshort_mustuniq(void *, int n);
void setshort_whitespace_ok(void *, int n);
+typedef struct arglist {
+ char *argstring;
+ char **argval;
+ char *helpstring;
+} arglist_t;
+
typedef struct ff_vecs {
ff_init rd_init;
ff_init wr_init;
ff_deinit wr_deinit;
ff_read read;
ff_write write;
+ arglist_t *args;
} ff_vecs_t;
void waypt_init(void);
static void mag_readmsg(void);
static void *mkshort_handle;
static char *deficon;
+static char *bs;
+static char *noack;
+
typedef enum {
mrs_handoff = 0,
}
#endif
+static
+arglist_t mag_args[] = {
+ {"baud", &bs, "Numeric value of bitrate (baud=4800)"},
+ {"noack", &noack, "Suppress use of handshaking in name of speed"},
+ {"deficon", &deficon, "Default icon name"},
+ {0, 0, 0}
+};
static void
mag_rd_init(const char *portname, const char *args)
{
time_t now, later;
- char * bs = get_option(args, "baud");
- char * noack = get_option(args, "noack");
- deficon = get_option(args, "deficon");
if (bs) {
bitrate=atoi(bs);
}
#else
struct stat sbuf;
- deficon = get_option(args, "deficon");
magfile_out = fopen(portname, "w+b");
fstat(fileno(magfile_out), &sbuf);
is_file = S_ISREG(sbuf.st_mode);
mag_deinit,
mag_read,
mag_write,
+ mag_args
};
char *svecname = strtok(v, ",");
while (vec->vec) {
- if (strcmp(svecname, vec->name) == 0) {
- char * res = strchr(vecname, ',');
- if (res)
- *opts = strchr(vecname, ',')+1;
- else
- *opts = NULL;
- free(v);
- return vec->vec;
+ arglist_t *ap;
+ char *res;
+
+ if (strcmp(svecname, vec->name)) {
+ vec++;
+ continue;
+ }
+
+ res = strchr(vecname, ',');
+ if (res) {
+ *opts = strchr(vecname, ',')+1;
+
+ if (vec->vec->args) {
+ for (ap = vec->vec->args; ap->argstring; ap++){
+ *ap->argval = get_option(*opts, ap->argstring);
+ }
+ }
+ } else {
+ *opts = NULL;
}
- vec++;
+
+ free(v);
+ return vec->vec;
+
}
free(v);
return NULL;
disp_vecs(void)
{
vecs_t *vec;
+ arglist_t *ap;
+
for (vec = vec_list; vec->vec; vec++) {
printf(" %-20.20s %-50.50s\n",
vec->name, vec->desc);
+ for (ap = vec->vec->args; ap && ap->argstring; ap++) {
+ printf(" %-10.10s %-40.40s\n",
+ ap->argstring, ap->helpstring);
+ }
}
}